<?php

Yii::import('application.modules.carta.models._base.BaseInfoCartaSemanal');

/**
 * Modelo (heredado) para la tabla InfoCartaSemanal
 * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
 */
class InfoCartaSemanal extends BaseInfoCartaSemanal {

    public $alimentos;
    public $diasSemana;

    /**
     * @return InfoCartaSemanal
     */
    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    public static function label($n = 1) {
        return Yii::t('app', 'Men&uacute; Semanal|Men&uacute;s Semanales', $n);
    }

    public function rules() {
        return array_merge(array(
            array('responsable, entidad_ejecutora, personal_comunitario, numero_ninos', 'required'),
            array('personal_comunitario, numero_ninos', 'numerical', 'integerOnly' => true),
            array('responsable, entidad_ejecutora', 'length', 'max' => 100),
            array('responsable, entidad_ejecutora, nombre_CIBV', 'length', 'max' => 100),
            array('fecha_inicial, fecha_fin', 'safe'),
            array('fecha_inicial, fecha_fin', 'default', 'setOnEmpty' => true, 'value' => null),
            array('id, responsable, fecha_inicial, fecha_fin, entidad_ejecutora, personal_comunitario, numero_ninos, alimentos', 'safe', 'on' => 'search'),
            array('id, responsable, fecha_inicial, fecha_fin, entidad_ejecutora, personal_comunitario, numero_ninos, nombre_CIBV, alimentos', 'safe', 'on' => 'search'),
        ));
    }

    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels() {
        return array(
            'id' => Yii::t('app', 'ID'),
            'responsable' => Yii::t('app', 'Responsable alimentación'),
            'fecha_inicial' => Yii::t('app', 'Fecha Inicial'),
            'fecha_fin' => Yii::t('app', 'Fecha Fin'),
            'entidad_ejecutora' => Yii::t('app', 'Entidad Ejecutora'),
            'personal_comunitario' => Yii::t('app', 'N° Personal Comunitario'),
            'numero_ninos' => Yii::t('app', 'Numero Niños'),
            'nombre_CIBV' => Yii::t('app', 'Nombre Cibv'),
            'diasSemana' => Yii::t('app', 'Días:'),
            'cartaSemanals' => null,
        );
    }

    public function relations() {
        return array_merge(array(
            'niniosCartaSemanals' => array(self::BELONGS_TO, 'NiniosInfoCartasemanal', 'id'),
        ));
    }

    public function searchColumns() {
        return array(
            'nombre_CIBV:text',
            'entidad_ejecutora:text',
            'responsable:text',
            'numero_ninos:text',
            'fecha_inicial:text',
            'fecha_fin:text'
        );
    }

    public function search(array $columns = null) {
        $criteria = new CDbCriteria;
        $sort = new CSort;
        if (isset($_GET['sSearch'])) {
            $criteria->compare('t.nombre_CIBV', $_GET['sSearch'], true, 'OR');
            $criteria->compare('t.entidad_ejecutora', $_GET['sSearch'], true, 'OR');
            $criteria->compare('t.responsable', $_GET['sSearch'], true, 'OR');
            $criteria->compare('t.numero_ninos', $_GET['sSearch'], true, 'OR');
            $criteria->compare('t.fecha_inicial', $_GET['sSearch'], true, 'OR');
            $criteria->compare('t.fecha_fin', $_GET['sSearch'], true, 'OR');
        }
        $criteria->compare('t.nombre_CIBV', $this->nombre_CIBV, true, 'OR');
        $criteria->compare('t.entidad_ejecutora', $this->entidad_ejecutora, true, 'OR');
        $criteria->compare('t.responsable', $this->responsable, true, 'OR');
        $criteria->compare('t.numero_ninos', $this->numero_ninos, true, 'OR');
        $criteria->compare('t.fecha_inicial', $this->fecha_inicial, true, 'OR');
        $criteria->compare('t.fecha_fin', $this->fecha_fin, true, 'OR');

//        $criteria->having = 't.id';

        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
            'sort' => new EDTSort(__CLASS__, $columns),
            'pagination' => new EDTPagination,
        ));
    }

    /**
     * Recupera las cartassemanales del infoCartaSemanal seleccionado
     * @author Sofia Mejia <asmejia@utn.edu.ec>
     * @param int $id del InfoCartaSemanal
     * @return si existen datos un array con la informacion del InfoCartaSemanal 
     * y las cartas nutricionales con su respectivo dia de alimentacion y 
     * tiempo de comida correspondiente caso contrario un string vacio
     */
    public function datos_para_pdf($id) {
        $tiempoComida = array();
        $variantes = array();
        $diasSemanas = array();
        $model = InfoCartaSemanal::model()->findByPk((int) $id);
        $cartasSemanales = CartaSemanal::model()->de_InfoCartaSemanal_Id($id)->findAll();
        if (isset($cartasSemanales)) {
            foreach ($cartasSemanales as $value) {
                $cartaNutricional = CartaNutricional::model()->findByPk((int) $value->carta_nutricional_id);
                $tipoCarta = TipoCarta::model()->findByPk((int)$cartaNutricional->tipo_carta_id);
                $nombreTipoCarta = $tipoCarta->nombre;
                $result = CartaAlimentos::model()->de_menu_id($cartaNutricional->id)->findAll();
                foreach ($result as $cartaAlimentos) {
                    $varianteCarta = VariantesCarta::model()->findByPk((int) $cartaAlimentos->variantes_carta_id);
                    $nombreVarianteCarta = $varianteCarta->representacion;
                    $alimentos = Alimentos::model()->findByPk((int) $cartaAlimentos->alimentos_id);
                    $datos = array();
                    $datos = array($nombreVarianteCarta => array(
                            $value->dia_semana => array(
                                'alimento' => $alimentos->nombre . " " . $alimentos->descripcion,
                                'medida' => $cartaAlimentos->medida,
                                'cantidad' => $cartaAlimentos->cantidad)
                    ));
                    $temp = array();
                    $temp[$nombreTipoCarta] = $datos;
                    array_push($tiempoComida, $temp);
                }
            }
            $exportar_pdf = array($model, $tiempoComida);
        }
        if (!empty($exportar_pdf))
            return $exportar_pdf;
        else
            return "";
    }

    /**
     * Busca si la tabla del modelo no esta vacia
     * @author Sofia Mejia <asmejia@utn.edu.ec>
     * @return query
     */
    public function contarDatos() {
        $result = array();
        if (Yii::app()->user->checkAccess("admin") || Yii::app()->user->checkAccess("supervisor") || Yii::app()->user->checkAccess("nutricion")) {
            $command = Yii::app()->db->createCommand()
                    ->select("count(id) as total")
                    ->from($this->tableName())
            ;
            $result = $command->queryAll();
        } else if (Yii::app()->user->checkAccess("institucion")) {
            $modelCruge = InstitucionCrugeUser::model()->de_usuario()->findAll();
            $institucion = Institucion::model()->findByPk((int)$modelCruge[0]['oldValues']['institucion_id']);
            $command = Yii::app()->db->createCommand()
                    ->select("count(id) as total")
                    ->from($this->tableName())
                    ->where('nombre_CIBV=:nombre_institucion', array(':nombre_institucion' => $institucion->nombre))
            ;
            $result = $command->queryAll();
        }
        return $result[0]['total'];
    }

    /**
     * Encuentra los menus semanales para la isntitucion logueada
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @return \InfoCartaSemanal
     */
    public function pertenece_al_cibv() {
        $modelCruge = InstitucionCrugeUser::model()->de_usuario()->findAll();
        $institucion = Institucion::model()->findByPk((int) $modelCruge[0]['oldValues']['institucion_id']);
        $this->getDbCriteria()->mergeWith(
                array(
                    'condition' => 't.nombre_CIBV=:nombre',
                    'params' => array(':nombre' => $institucion['oldValues']['nombre'],
                    )
                )
        );

        return $this;
    }

    /**
     * Valida que el menu semanal sea actualizado como plazo maximo hasa su fecha de fin
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param int $idInfoCartaSemanal
     * @return boolean True: posible actualizar, False: no es posible actualizar
     */
    public function validateTiempoActualizacion($idInfoCartaSemanal) {
        $command = Yii::app()->db->createCommand()
                ->select('fecha_fin > now() as bool')
                ->from('info_carta_semanal ics')
                ->where('ics.id = :idInfoCartaSemanal', array(':idInfoCartaSemanal' => $idInfoCartaSemanal));
        $result = $command->queryAll();
        if ($result[0]['bool'] == "1") {
            return TRUE;
        }
        return false;
    }

    /**
     * Criteria que busca si el menú semanal tiene asignado infantes
     * @author Sofía Mejía <asmejia@utn.edu.ec>
     * @return \InfoCartaSemanal
     */
    public function menu_no_asignado() {
        $this->getDbCriteria()->mergeWith(
                array(
                    'join' => 'LEFT JOIN ninios_info_cartasemanal nif ON nif.info_carta_semanal_id= t.id',
                    'condition' => 'nif.info_carta_semanal_id is null',
                )
        );
        return $this;
    }

    /**
     * Criteria que valida la fecha maxima de asignación del menu
     * @author Sofía Mejía <asmejia@utn.edu.ec>
     * @return \InfoCartaSemanal
     */
    public function fecha_asignacion_valida() {
        $this->getDbCriteria()->mergeWith(
                array(
                    'condition' => 't.fecha_fin > now()',
                )
        );
        return $this;
    }

}
